
/*

        GESTOR GENERAL ORIGINAL

*/


package controlador;

import conexion.conexionBD;
import conexion.DBsentencias;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

public class GestorGeneral2 implements DBsentencias{

    /**
    * Realiza la consulta de personas en la tabla y devuelve el ResultSet
    * correspondiente.
    * @return El resultado de la consulta
    */

    //Declaraciones
    protected conexionBD bd;
    protected GestorTabla gestorTabla;
    protected Connection conexion;


    //Constructor
    public GestorGeneral2() {
        try {
            bd = new conexionBD();
            gestorTabla = new GestorTabla();
            bd.connect();
            conexion = bd.getConn();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    //Cierra la conexión
    public void cerrarConexion() {
        try {
            conexion.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // ********* Actualiza los datos en la base de datos correspondiente
    public  void cargarArrayDeObject(Object[] arregloDatosCampos, 
            ResultSetMetaData metaDatos) {                                      // Método en proceso

        // Este array hay que armarlo en la vista

        // Se obtiene los metadatos de la consulta. Con ellos
        // podemos obtener el número de columnas y el nombre
        // de las mismas.
        //   ResultSetMetaData metaDatos = rs.getMetaData();

        try {
            int numeroColumnas = metaDatos.getColumnCount();                    // Se obtiene el numero de columnas.
            Object[] camposDelResulSet = new Object[numeroColumnas];            // Se obtienen las etiquetas para cada columna
            for (int i = 0; i < numeroColumnas; i++) {                          // Recorre N veces donde N es la cantidad de columnas
                camposDelResulSet[i] = metaDatos.getColumnLabel(i + 1);         // Guarda los label de las columnas en un array de objetos
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void actualizarDatos(String[] arregloDatosCampos,                    // Este array hay que armarlo en la vista
             String nroConsulta) {

        ejecutarSentencia(arregloDatosCampos,nroConsulta);

    }

    public void insertarDatos(String[] arregloDatosCampos,String nroConsulta) { // arregloDatosCampos contiene un registro completo

        ejecutarSentencia(arregloDatosCampos,nroConsulta);

    }


 // ******* Realiza una baja lògica en la base de datos correspondiente
 // pasa "V" (verdadero) al campo baja, lo pone como inactivo
       public void eliminarUnaFila(Long id,String nroConsulta) {

        String[] arregloDatosCampos = {"V",id.toString()};
        ejecutarSentencia(arregloDatosCampos,nroConsulta);

    }

// ******   Ejecutar sentencias generico
      public void ejecutarSentencia(String arregloDatosCampos[],String nroConsulta){
          try {

            PreparedStatement ps = conexion.prepareStatement(nroConsulta);

            for(int i = 0;i<arregloDatosCampos.length;i++){
                ps.setObject(i+1, arregloDatosCampos[i]);                       //desglosa para ir campo por campo
                
            }
            ps.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();


        }
    }


//:::::::::::::::::::::::::::: BUSQUEDAS :::::::::::::::::::::::::::::::::::::::
  //Devuelve hojas de resultados dependiendo de la consulta
  // ***********  Devuelve hojas deresultados dependiendo de la consulta
       public ResultSet dameResultSet(String consulta){
        ResultSet rs = null;
        try {

            Statement s = conexion.createStatement();
            rs = s.executeQuery(consulta);
            return rs;

        } catch (Exception e) {
            e.printStackTrace();

            return null;
        }
    }


// ********** *********************************



  // MÃ©todo sobrecargado para realizar bùsquedas de los combos
       public ResultSet dameResultSet(String campo, String valorBuscado,String consulta){
        ResultSet rs = null;
        try {
            Statement s = conexion.createStatement();
              String cadena = consulta + campo + " like '" + valorBuscado + "%'";
            rs = s.executeQuery(cadena);
            return rs;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

// Devuelve una fila
    public ResultSet dameUnaFila(Long idFila,String nroConsulta) {
        ResultSet rs = dameResultSet(nroConsulta + idFila);
        return rs;
    }
// Devuelve todas las filas
     public ResultSet dameListaCompleta(String nroConsulta) {
        ResultSet rs = dameResultSet(nroConsulta);
        return rs;
    }
     
}
